package com.demo.search.service;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import com.demo.search.model.SearchTask;
import com.demo.search.model.SearchTask.Operate;
import com.demo.search.model.SearchTask.Status;
import com.demo.search.support.SearchTaskSupport;

/**
 * 索引任务服务
 * @author ryuu.kk
 *
 */
public interface SearchTaskService {

	
	/**
	 * 获取任务列表
	 * @param targetType 目标类型
	 * @param operate    操作类型
	 * @param status     操作状态
	 * @param begin      起始时间
	 * @param end        中止时间
	 * @return List<SearchTask> 任务列表
	 */
	List<SearchTask> findList(Long siteId, String targetType, Operate operate, Status status, Date begin, Date end);
	
	/**
	 * 获取起始时间-终止时间内的指定状态的任务
	 * @param status Status
	 * @param begin  Dateq起始时间
	 * @param end    Date 中止时间
	 * @return
	 */
	List<SearchTask> findList(Long siteId, Status status);
	
	/**
	 * 处理等待状态的任务
	 * @return int 任务执行数
	 * @throws IOException
	 */
	int process() throws IOException;
	
	/**
	 * 任务处理函数 
	 * 处理索引任务表中需要索引的模型(主键ID)
	 * @param status 任务状态
	 * @return int 处理条数
	 * @throws IOException 
	 */
	int process(Status status) throws IOException;
	
	/**
	 * 任务处理函数 
	 * 处理索引任务表中需要索引的模型(主键ID)
	 * @return int 处理条数
	 * @throws IOException 
	 */
	int processAll() throws IOException;
	
	/**
	 * 加入业务索引支持
	 * @param support SearchTaskSupport
	 */
	void addSupport(SearchTaskSupport support);

}
